package gitobject;
import repository.Repository;

import java.io.*;
import java.util.Scanner;

//要建立一个存储最新HEAD的文件，否则commit记录只停留在内存中，下次无法找到
class HEAD {
    private String gitPath;
    private File headFile;
    protected String headId;       				//最新的commit文件名（其哈希值）
    public String curBranch = Repository.getGitDir() + File.separator + "branch.txt";  //该文件用于存放当前分支名

    HEAD() throws FileNotFoundException{
        this.gitPath = Repository.getGitDir() + File.separator + "branches";
        this.headFile= new File(gitPath + File.separator + "HEAD");
        this.headId = get_headId();
    }

    public void update_head ( String commit ) throws IOException {
        if(!headFile.exists()) {
            //如果HEAD.txt文件不存在，说明是正在初始化仓库，同时进行第一次commit，默认分支为主分支
            headFile.createNewFile();
            PrintWriter output = new PrintWriter(headFile);
            output.print(commit);
            output.close();
            System.out.println("Commit成功，HEAD文件已建立。");

            File save = new File(curBranch);  //默认分支为主分支，写入current_branch.txt
            PrintWriter out = new PrintWriter( save);
            out.write( "mainCommitPath" );
            out.close();
            System.out.println("当前分支是main分支。");
        }
        else {
            commit = "\n" + commit;
            FileOutputStream output = new FileOutputStream(headFile, true );  //HEAD文件会保存过往所有的commit
            output.write(commit.getBytes() );            //最新的commit在最后一行
            output.close();
            System.out.println("Commit成功，HEAD文件已更新。");
        }
    }

    //返回当前分支的最新Commit名字
    public String get_headId() throws FileNotFoundException {
        if( !headFile.exists() ) {
            return null;
        }
        else {
            Scanner input = new Scanner(headFile);
            String content = null;
            while( input.hasNextLine() ) {
                content = input.nextLine();

            }   //这个while循环是为了读取HEAD文件的最后一行，最后一行是最新的Head值。
            input.close();
            headId = content;
            return headId;
        }
    }


    //返回当前分支的最新Commit所对应的Tree文件的哈希值（文件名）
    public String get_tree() throws FileNotFoundException {
        if( !this.headFile.exists() )
            return null;
        else {
            File commitId = new File(gitPath + File.separator + this.headId);
            Scanner input = new Scanner(commitId);
            String lastTree = input.nextLine();   //上一次的commit文件里的第一行就是存放着tree_key
            input.close();
            return lastTree;
        }
    }

}
